"""
API配置模块
"""
import os
import json
from typing import Dict, Any


class APIConfig:
    """API配置类"""
    
    # 配置文件路径
    CONFIG_FILE = os.path.join(os.path.dirname(__file__), "..", "config.json")
    
    # 默认配置
    DEFAULT_CONFIG = {
        "base_url": "https://open.bigmodel.cn/api/paas/v4/chat/completions",
        "model": "glm-4.6",
        "temperature": 1.0,
        "max_tokens": 500,
        "stream": False,
        "timeout": 60
    }
    
    # 测试用例
    TEST_CASES = {
        "simple_chat": {
            "system_prompt": "你是一个有用的AI助手。",
            "user_prompt": "用一句话介绍人工智能",
            "expected_keywords": ["人工智能"]
        },
        "code_generation": {
            "system_prompt": "你是一个专业的Python程序员。",
            "user_prompt": "写一个Python函数计算斐波那契数列",
            "expected_keywords": ["Python", "函数"]
        },
        "translation": {
            "system_prompt": "你是一个专业的翻译助手。",
            "user_prompt": "将'Hello World'翻译成中文",
            "expected_keywords": ["你好"]
        }
    }
    
    @classmethod
    def get_api_key(cls) -> str:
        """
        获取API密钥
        
        Returns:
            API密钥字符串
        """
        # 优先从环境变量获取
        api_key = os.getenv("GLM_API_KEY")
        
        # 如果环境变量中没有，则从配置文件读取
        if not api_key:
            config = cls._load_config()
            api_key = config.get("api_key", "<token>")
            
        return api_key
    
    @classmethod
    def _load_config(cls) -> Dict[str, Any]:
        """
        从配置文件加载配置
        
        Returns:
            配置字典
        """
        try:
            with open(cls.CONFIG_FILE, 'r', encoding='utf-8') as f:
                return json.load(f)
        except (FileNotFoundError, json.JSONDecodeError):
            # 如果配置文件不存在或格式错误，返回默认配置
            return cls.DEFAULT_CONFIG.copy()
    
    @classmethod
    def get_config(cls) -> Dict[str, Any]:
        """
        获取完整配置
        
        Returns:
            配置字典
        """
        # 优先从环境变量获取API密钥
        api_key = os.getenv("GLM_API_KEY")
        
        # 从配置文件加载配置
        config = cls._load_config()
        
        # 如果环境变量中有API密钥，则覆盖配置文件中的值
        if api_key:
            config["api_key"] = api_key
        # 如果配置文件中没有API密钥，则使用默认值
        elif "api_key" not in config:
            config["api_key"] = "<token>"
            
        return config